package com.lile.IO_04.IO;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class FileOutputStreamDemo {

	public static void main(String[] args) throws IOException {

		// test1();

		// test2();
		test3();
		test4();
	}

	public static void test1() throws IOException {
		// 创建字节输出流对象
		FileOutputStream fos1 = new FileOutputStream("a.txt");
		OutputStream os = new FileOutputStream("a.txt");

		// 如果传递的不是String，而是File
		File file = new File("b.txt");
		FileOutputStream fos2 = new FileOutputStream(file);

		/*
		 * 创建字节数据流对象做了哪些事情呢？ （1）调用系统功能创建了一个文件a.txt （2）创建了一个对象fos
		 * （3）把fos对象指向了a.txt文件
		 */

		// 写数据：一次写一个字节的数据
		fos1.write(1);
		fos1.write(2);
		fos1.write(3);

		// 一次写一个字节数组的数据
		fos1.write("hello world!".getBytes());

		// 一次写一个字节数组的一部分
		fos1.write("hello java!".getBytes(), 6, 5);

		// 释放资源：关闭此文件输出流并释放与此流有关的所有系统资源
		/**
		 * 做两件事情： （1）关闭流对象（流对象不可以继续写数据了） （2）释放与此流相关的资源（通知系统去释放与此流相关的资源）
		 */
		fos1.close();
	}

	public static void test2() throws IOException {
		FileOutputStream fos = new FileOutputStream("../JavaSE/05_IO/com/lile/IO_04/IO/c.txt", true);

		// 写数据
		for (int i = 0; i < 10; i++) {
			// fos.write(("hello" + i).getBytes());
			// fos.write(("hello" + i + "\r").getBytes());
			// fos.write(("hello" + i + "\n").getBytes());
			fos.write(("hello" + i + "\r\n").getBytes());
		}

		// 释放资源
		fos.close();
	}

	public static void test3() {
		// 定义在外，可以让finally里面看到
		FileOutputStream fos = null;

		try {
			fos = new FileOutputStream("../JavaSE/05_IO/com/lile/IO_04/IO/test3.txt");
			fos.write("hello".getBytes());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 先判断不为null，才去关闭
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public static void test4() {
		FileOutputStream fos = null;

		try {
			fos = new FileOutputStream("../JavaSE/05_IO/com/lile/IO_04/IO/test4.txt");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("创建文件失败");
		}

		try {
			fos.write("hello".getBytes());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("写入数据失败");
		}

		try {
			fos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("释放资源失败");
		}
	}

}
